package com.ftg.learn.chapter09.reflech.demo03.ioc;

import java.util.Objects;

/**
 * 把资源清单 - 转换成为资源 - 实例  - 容器里面
 * 方法声明
 * @author kangjx
 * @date 2023/1/13
 */
public interface BeanFactory {

    /**
     * 把清单转换成转换成为资源 - 实例  - 容器里面
     * @param list 资源清单
     */
    void putBeanIntoContainers(DetailList list);

    void putBeanIntoContainers(DetailList[] list);

    /**
     * 通过别名在容器里面查找实例
     * @param aliasName  别名
     * @return
     */
    Object getBean(String aliasName);

    /**
     * 这是一个把清单转换成为资源的方法
     * @param list 一条清单
     * @return
     */
    default NaturalResources detailListConverntToResources(DetailList list){
        NaturalResources nr = new NaturalResources();
        nr.setAliasName(list.getAliasName());
        Object instance = null;
        /**
         * 只有字符串 没有Class
         */
        if(!list.getPath().equals("") && Objects.nonNull(list.getPath()) && Objects.isNull(list.getMySelf())){
            try {
                instance = Class.forName(list.getPath()).newInstance();
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        if(list.getPath().equals("") && Objects.isNull(list.getPath()) && Objects.nonNull(list.getMySelf())){
            try {
                instance = list.getMySelf().newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        nr.setInstance(instance);
        return nr;
    }


}
